package com.sjz.vhr.service;

import com.sjz.vhr.mapper.MenuMapper;
import com.sjz.vhr.mapper.MenuRoleMapper;
import com.sjz.vhr.model.Hr;
import com.sjz.vhr.model.Menu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class MenuService {

    @Autowired
    MenuMapper menuMapper;
    @Autowired
    MenuRoleMapper menuRoleMapper;

    public List<Menu> getMenusByHrId(){
        //要传入id了，id从哪里来，我们登录的用户信息保存到security里面
        //SecurityContextHolder里面有一个getContext()方法.getAuthentication()它里面的getPrincipal()，
        //Principal它是当前登录的用户对象，然后强转成Hr对象再获取它里面的id
        return menuMapper.getMenusByHrId(((Hr) SecurityContextHolder.getContext().
                getAuthentication().getPrincipal()).getId());

    }

    /**
     * 获取所有的菜单角色   一对多 一个菜单项有多个角色
     * @return
     */
//    @Cacheable  //这个菜单基本不变，一般会放到缓存中
    public List<Menu> getAllMenusWithRole(){
        return menuMapper.getAllMenusWithRole();
    }

    //获取所有菜单
    public List<Menu> getAllMenus() {
        return menuMapper.getAllMenus();
    }



    //根据角色id查询菜单的id
    public List<Integer> getMidsByRid(Integer rid) {
        return menuMapper.getMidsByRid(rid);
    }

    //更新角色菜单
    @Transactional  //@Transactional 开启提交事务
    public boolean updateMenuRole(Integer rid, Integer[] mids) {
        menuRoleMapper.deleteByRid(rid); //先调用menuRoleMapper的这个方法删除，再添加
        //先判断是否为空,如果为空就直接返回true
        if (mids == null || mids.length ==0){
            return true;
        }
        //否则就进行插入操作
        Integer result = menuRoleMapper.insertRecord(rid,mids); //添加操作，相当于更新了数据
        return result==mids.length;
    }
}
